Android11 开机默认旋转90度 您所在的位置:网站首页 find x开机动画 Android11 开机默认旋转90度

Android11 开机默认旋转90度

2023-08-15 10:19| 来源: 网络整理| 查看: 265

硬件平台:QCS6125

软件平台:Android11

需求说明:开机自动旋转90度,改横屏显示为默认竖屏,从开机logo,开机动画开始就默认旋转。

直接上patch:

先修改SurfaceFlinger部分:

diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index ce38f251c..db5156822 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -92,7 +92,7 @@ DisplayDevice::DisplayDevice(DisplayDeviceCreationArgs& args) setPowerMode(args.initialPowerMode); // initialize the display orientation transform. - setProjection(ui::ROTATION_0, Rect::INVALID_RECT, Rect::INVALID_RECT); + setProjection(ui::ROTATION_270, Rect::INVALID_RECT, Rect::INVALID_RECT); } DisplayDevice::~DisplayDevice() = default; @@ -179,7 +179,10 @@ void DisplayDevice::setProjection(ui::Rotation orientation, Rect viewport, Rect if (!frame.isValid()) { // the destination frame can be invalid if it has never been set, // in that case we assume the whole display frame. - frame = Rect(displayWidth, displayHeight); + if( displayWidth < displayHeight) + frame = Rect(displayHeight, displayWidth); + else + frame = Rect(displayWidth, displayHeight); } if (viewport.isEmpty()) { diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 0d07abb1d..d76288005 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -4963,7 +4963,7 @@ void SurfaceFlinger::onInitializeDisplays() { DisplayState::eLayerStackChanged; d.token = token; d.layerStack = 0; - d.orientation = ui::ROTATION_0; + d.orientation = ui::ROTATION_270; d.frame.makeInvalid(); d.viewport.makeInvalid(); d.width = 0;

第二步,修改SettingsProvider部分:

diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml index 5f47cfe02af..2fc6c9949f5 100644 --- a/packages/SettingsProvider/res/values/defaults.xml +++ b/packages/SettingsProvider/res/values/defaults.xml @@ -111,7 +111,7 @@ true - 0 + 3 -1

默认settings键值配置为竖屏

第三步:修改RotationPolicy.java

diff --git a/core/java/com/android/internal/view/RotationPolicy.java b/core/java/com/android/internal/view/RotationPolicy.java index cfb2bf9df9e..f6825230a3f 100644 --- a/core/java/com/android/internal/view/RotationPolicy.java +++ b/core/java/com/android/internal/view/RotationPolicy.java @@ -42,7 +42,7 @@ public final class RotationPolicy { private static final String TAG = "RotationPolicy"; private static final int CURRENT_ROTATION = -1; - public static final int NATURAL_ROTATION = Surface.ROTATION_0; + public static final int NATURAL_ROTATION = Surface.ROTATION_270; private RotationPolicy() { } @@ -204,4 +204,4 @@ public final class RotationPolicy { public abstract void onChange(); }

第四步:修改DisplayRotation.java

diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java index 5f0e6bb6064..b9205183929 100644 --- a/services/core/java/com/android/server/wm/DisplayRotation.java +++ b/services/core/java/com/android/server/wm/DisplayRotation.java @@ -124,7 +124,7 @@ public class DisplayRotation { * @see #updateRotationUnchecked */ @Surface.Rotation - private int mRotation; + private int mRotation = 3; @VisibleForTesting int mLandscapeRotation; // default landscape @@ -181,7 +181,7 @@ public class DisplayRotation { private int mUserRotationMode = WindowManagerPolicy.USER_ROTATION_FREE; @Surface.Rotation - private int mUserRotation = Surface.ROTATION_0; + private int mUserRotation = Surface.ROTATION_270; /** * Flag that indicates this is a display that may run better when fixed to user rotation. @@ -839,7 +839,7 @@ public class DisplayRotation { if (userRotation < Surface.ROTATION_0 || userRotation > Surface.ROTATION_270) { Slog.w(TAG, "Trying to restore an invalid user rotation " + userRotation + " for " + mDisplayContent); - userRotation = Surface.ROTATION_0; + userRotation = Surface.ROTATION_270; } mUserRotationMode = userRotationMode; mUserRotation = userRotation; @@ -1314,7 +1314,7 @@ public class DisplayRotation { if (preferredRotation >= 0) { return preferredRotation; } - return Surface.ROTATION_0; + return Surface.ROTATION_270; } } @@ -1469,7 +1469,7 @@ public class DisplayRotation { // Configure rotation lock. final int userRotation = Settings.System.getIntForUser(resolver, - Settings.System.USER_ROTATION, Surface.ROTATION_0, + Settings.System.USER_ROTATION, Surface.ROTATION_270, UserHandle.USER_CURRENT); if (mUserRotation != userRotation) { mUserRotation = userRotation;

第五步:修改开机动画部分

diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp index 301726d1aae..91f27b0d586 100644 --- a/cmds/bootanimation/BootAnimation.cpp +++ b/cmds/bootanimation/BootAnimation.cpp @@ -387,10 +387,14 @@ status_t BootAnimation::readyToRun() { resolution = limitSurfaceSize(resolution.width, resolution.height); // create the native surface sp control = session()->createSurface(String8("BootAnimation"), - resolution.getWidth(), resolution.getHeight(), PIXEL_FORMAT_RGB_565); + resolution.getHeight(), resolution.getWidth(), PIXEL_FORMAT_RGB_565); + SLOGE("====== BootAnimation::readyToRun: height:%d; width: %d", resolution.getHeight(), resolution.getWidth()); SurfaceComposerClient::Transaction t; + Rect destRect(resolution.getHeight(), resolution.getWidth()); + t.setDisplayProjection(mDisplayToken, ui::ROTATION_270, destRect, destRect); + // this guest property specifies multi-display IDs to show the boot animation // multiple ids can be set with comma (,) as separator, for example: // setprop persist.boot.animation.displays 19260422155234049,19261083906282754

至此从开机动画开始往后的UI都修改为默认竖屏了,剩下的就是bootlogo部分,这部分只需要把bmp格式素材自行旋转为竖屏,编译到系统即可。

需求搞定~~~~~~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有